package es.iespuertodelacruz.dai.secuencia;

public class SecuenciaInteger {

	private int[] intArray;
	private int numElems;
	
	public SecuenciaInteger(int n) {
		super();
		
		this.intArray = new int[n];
		this.numElems = 0;		
	}
	
	private boolean lleno() {
		return numElems == intArray.length;
	}
	
	public int insertar(int n) {
		
		if (!lleno()) {
			
			intArray[numElems] = n;
			return numElems++;	// ++ retorna numElems y luego incrementa
		} else
			return -1;
	}
	
	public int borrar(int n) {
		
		int pos = buscar(n);
		
		if (pos != -1) {
			
			intArray[pos] = intArray[numElems-1];
			numElems--;
			return pos;

		} else
			return -1;
	}
	
	private int buscar(int n) {
		
		for(int i = 0; i < intArray.length; i++)
			if (intArray[i] == n)
				return i;
		
		return -1;		
	}
	
	public int insertarNoRepe(int n) {
		
		if (!lleno() && buscar(n) == -1)
			return insertar(n);
		else
			return -1;		
	}
	
	public int buscarMayorIgual(int n) {
		
		for(int i = 0; i < intArray.length; i++)
			if (intArray[i] >= n)
				return i;
		
		return -1;		
	}
	
	private void desplazar(int pos, char dir) {
		
		switch (dir) {
		
		case 'I':
			for(int i = pos; i < numElems-1; i++)
				intArray[pos] = intArray[pos+1];
				
			intArray[numElems-1] = 0;
			break;
			
			
		case 'D':
			for(int i = numElems; i > pos; i--)
				intArray[i] = intArray[i-1];
			
			intArray[pos] = 0;
			break;		
		}		
	}
	
	public int insertarOrdenado(int n) {
		
		if (!lleno()) {
			
			int pos = buscarMayorIgual(n);
			if (pos == -1) // insertamos al final guay!
				return insertar(n);
			else {
				desplazar(pos, 'D');
				intArray[pos] = n;
				numElems++;
				return pos;
			}
		} else
			return -1;
	}
	
	public int get(int i) {
		
		// Puede lanzar una ArrayIndexOutOfBoundsException
		return intArray[i];
	}
}
